home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / prg_basi / ddfedit.zip / BTR.BAS < prev    next >
BASIC Source File  |  1996-02-05  |  13KB  |  389 lines

  1. Option Explicit
  2.  
  3.  
  4. Global Const B_OPEN = 0
  5. Global Const B_CLOSE = 1
  6. Global Const B_INSERT = 2
  7. Global Const B_UPDATE = 3
  8. Global Const B_DEL = 4
  9. Global Const B_GETEQ = 5
  10. Global Const B_GETNX = 6
  11. Global Const B_GETPR = 7
  12. Global Const B_GETGT = 8
  13. Global Const B_GETGE = 9
  14. Global Const B_GETLT = 10
  15. Global Const B_GETLE = 11
  16. Global Const B_GETLW = 12
  17. Global Const B_GETHI = 13
  18. Global Const B_CREATE = 14
  19. Global Const B_STAT = 15
  20. Global Const B_EXTEND = 16
  21. Global Const B_SET_DIR = 17
  22. Global Const B_GET_DIR = 18
  23. Global Const B_BEGIN = 19
  24. Global Const B_END = 20
  25. Global Const B_ABORT = 21
  26. Global Const B_GETPOS = 22
  27. Global Const B_GETDRC = 23
  28. Global Const B_STEPNXT = 24
  29. Global Const B_STOP = 25
  30. Global Const B_VERSION = 26
  31. Global Const B_UNLOCK = 27
  32. Global Const B_RESET = 28
  33. Global Const B_SETOWNR = 29
  34. Global Const B_CLROWNR = 30
  35. Global Const B_CRTSIDX = 31
  36. Global Const B_DRPSIDX = 32
  37. Global Const B_STEPFST = 33
  38. Global Const B_STEPLST = 34
  39. Global Const B_STEPPRV = 35
  40.                        
  41. Global Const bxGetNext = 36
  42. Global Const bxinsert = 40
  43.  
  44. Rem Key Flag%
  45.  
  46. Global Const K_DUP = 1
  47. Global Const K_MOD = 2
  48. Global Const K_BIN = 4
  49. Global Const K_NUL = 8
  50. Global Const K_SEG = 16
  51. Global Const K_SEQ = 32
  52. Global Const K_DEC = 64
  53. Global Const K_SUP = 128
  54. Global Const K_EXT = 256
  55. Global Const K_MAN = 512
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. Global Const K_T_STR = 0
  64. Global Const K_T_BIN = 1
  65. Global Const K_T_FLOAT = 2
  66. Global Const K_T_DATE = 3
  67. Global Const K_T_TIME = 4
  68. Global Const K_T_DEC = 5
  69. Global Const K_T_MONEY = 6
  70. Global Const K_T_LOGICAL = 7
  71. Global Const K_T_NUM = 8
  72. Global Const K_T_BFLOAT = 9
  73. Global Const K_T_LSTR = 10
  74. Global Const K_T_ZSTR = 11
  75. Global Const K_T_UNSIGN = 14
  76. Global Const K_T_AUTOINC = 15
  77.  
  78.  
  79.  
  80. ' ********************************************************************************
  81. ' These are the various FieldType constants.
  82. ' note : as the FieldType (XeDDataType) is actually a 1 char string we will have
  83. '        to assign it using, for example XeDDataType=CHR(FieldType_Integer)
  84.  
  85. Global Const FieldType_String = 0
  86. Global Const FieldType_Integer = 1
  87. Global Const FieldType_Float = 2
  88. Global Const FieldType_Date = 3
  89. Global Const FieldType_Time = 4
  90. Global Const FieldType_Decimal = 5
  91. Global Const FieldType_Money = 6
  92. Global Const FieldType_Logical = 7
  93. Global Const FieldType_Numeric = 8
  94. Global Const FieldType_Bfload = 9
  95. Global Const FieldType_Lstring = 10
  96. Global Const FieldType_Zstring = 11
  97. Global Const FieldType_Note = 12
  98. Global Const FieldType_Lvar = 13
  99. Global Const FieldType_Unsigned = 14
  100. Global Const FieldType_AutoInc = 15
  101.  
  102.  
  103. Global Const MAXKEYS = 9
  104.  
  105. Type PosBlkDef
  106.     pb As String * 128
  107. End Type
  108.  
  109. Type KeyBufDef
  110.     kb As String * 64
  111. End Type
  112.  
  113. Type DummyBuffDef
  114.   dummy As String * 256
  115. End Type
  116.  
  117.  
  118.  
  119. Type KeySpecDef
  120.     Position As Integer
  121.     Length As Integer
  122.     Flags As Integer
  123.     Tot As Long
  124.     Type As Integer
  125.     Reserved As String * 4
  126. End Type
  127.  
  128. Type FileBufDef
  129.     RecLen As Integer
  130.     PageSize As Integer
  131.     IndxCnt As Integer
  132.     NotUsed As String * 4
  133.     FileFlags As Integer
  134.     Reserved As String * 2
  135.     Allocation As Integer
  136.     KeySpec(20) As KeySpecDef
  137. End Type
  138.     
  139. Type VerBuffDef
  140.   MainVer As Integer
  141.   SUbVer As Integer
  142.   Type As String * 1
  143. End Type
  144.  
  145. Global BtErr(140) As String
  146.  
  147.  
  148.  
  149.  
  150. Declare Function wbtrvinit Lib "wbtrcall.dll" (init As Any) As Integer
  151. Declare Function wbtrvstop Lib "wbtrcall.dll" () As Integer
  152. Declare Function btrcall Lib "wbtrcall.dll" (ByVal op As Integer, pb As PosBlkDef, db As Any, Dl As Integer, kb As Any, ByVal Klen As Integer, ByVal Knum As Integer) As Integer
  153.  
  154. 'Declare Function wbtrvinit Lib "wbtrlocl.dll" (init As Any) As Integer
  155. 'Declare Function wbtrvstop Lib "wbtrlocl.dll" () As Integer
  156. 'Declare Function btrcall Lib "wbtrlocl.dll" (ByVal op As Integer, pb As PosBlkDef, db As Any, Dl As Integer, kb As Any, ByVal Klen As Integer, ByVal Knum As Integer) As Integer
  157.  
  158. Sub BtrComErr (e As Integer)
  159.   MsgBox "" & e & "-" & BtErr(e), , "BTRIEVE STATUS"
  160. End Sub
  161.  
  162. Function BtrInit (Version As String)
  163.   Dim KeyBufLen As Integer
  164.   Dim Buflen As Integer
  165.   Dim stat As Integer
  166.   Dim x As Long, y As Single
  167.   Dim init As String * 64
  168.   Dim VerBuff As VerBuffDef
  169.   Dim KeyBuf As KeyBufDef
  170.   Dim PosBlk As PosBlkDef
  171.  
  172.   KeyBufLen = Len(KeyBuf)
  173.   Buflen = Len(VerBuff)
  174.   
  175.  
  176.   BtErr(0) = "Operation OK"
  177.   BtErr(1) = "Operation Parameter Invalid"
  178.   BtErr(2) = "Application Encountered an I/O error"
  179.   BtErr(3) = "File Not Open"
  180.   BtErr(4) = "Key Value Not Found"
  181.   BtErr(5) = "Duplicate Key"
  182.   BtErr(6) = "Key Number parameter Invalid"
  183.   BtErr(7) = "Key number has changed"
  184.   BtErr(8) = "Current Positioning Invalid"
  185.   BtErr(9) = "End of File Reached"
  186.   BtErr(10) = "Attempt to modify Non-Modifiable Key"
  187.   BtErr(11) = "File Name Specified Invalid"
  188.   BtErr(12) = "File Not found"
  189.   BtErr(13) = "Extension File not found"
  190.   BtErr(14) = "Failed to open PreImage File"
  191.   BtErr(15) = "I/O Error during PreImaging"
  192.   BtErr(16) = "Expansion Error"
  193.   BtErr(17) = "Close Error"
  194.   BtErr(18) = "Disk is Full"
  195.   BtErr(19) = "Unrecoverable Error"
  196.   BtErr(20) = "Microkernel or Requestor Inactive"
  197.   BtErr(21) = "Key buffer parameter too short"
  198.   BtErr(22) = "Data Buffer parameter too short"
  199.   BtErr(23) = "Position block length not 128 bytes"
  200.   BtErr(24) = "Invalid Page/DataBuffer size"
  201.   BtErr(25) = "Cannot Create specified file"
  202.   BtErr(26) = "Invalid number of keys specified"
  203.   BtErr(27) = "Invalid Key Position"
  204.   BtErr(28) = "Invalid Record Length"
  205.   BtErr(29) = "Invalid Key Length"
  206.   BtErr(30) = "File Specified is NOT a Btrieve file"
  207.   BtErr(31) = "File is Already Extended"
  208.   BtErr(32) = "File Cannot be Extended"
  209.   BtErr(33) = "Microkernel cannot Unload"
  210.   BtErr(34) = "Invalid Extension Name"
  211.   BtErr(35) = "Directory/Path Error"
  212.   BtErr(36) = "Transaction Error"
  213.   BtErr(37) = "Another Transaction is active"
  214.   BtErr(38) = "Transaction Control File I/O Error"
  215.   BtErr(39) = "End/Abort Transaction Specified BEFORE Begin"
  216.   BtErr(40) = "Exceeded Maximum number of files allowed"
  217.   BtErr(41) = "Attempted operation not allowed"
  218.   BtErr(42) = "File Opened in Accelerated mode was not closed"
  219.   BtErr(43) = "Invalid Record address"
  220.   BtErr(44) = "Invalid Key Path"
  221.   BtErr(45) = "Invalid Key Flags"
  222.   BtErr(46) = "Access to Specified File Denied"
  223.   BtErr(47) = "Number of Files opened exceeds maximum"
  224.   BtErr(48) = "Invalid Alternate collating sequence"
  225.   BtErr(49) = "Invalid Extended Key Type"
  226.   BtErr(50) = "Owner is already set"
  227.   BtErr(51) = "Invalid Owner Name"
  228.   BtErr(52) = "**UNDEFINED ERROR"
  229.   BtErr(53) = "Language Interface Version Invalid"
  230.   BtErr(54) = "Variable part of record is corrupt"
  231.   BtErr(55) = "Invalid Attribute for AutoInc Key"
  232.   BtErr(56) = "Index is incomplete"
  233.   BtErr(57) = "**UNDEFINED ERROR"
  234.   BtErr(58) = "Compression buffer length too Short"
  235.   BtErr(59) = "File Already Exists"
  236.   BtErr(60) = "Reached Reject count Specified"
  237.   BtErr(61) = "Work Space too small"
  238.   BtErr(62) = "Incorrect Descriptor"
  239.   BtErr(63) = "Invalid Data Buffer Parameter in Insert Extended"
  240.   BtErr(64) = "Filter Limit has been reached"
  241.   BtErr(65) = "Incorrect Filed Offset"
  242.   BtErr(66) = "Maximum number of open Databases exceeded"
  243.   BtErr(67) = "MicroKernel cannot open SQL data dictionary"
  244.   BtErr(68) = "MicroKernel Cannot perform RI Delete Cascade Operation"
  245.   BtErr(69) = "Delete Operation specified a damaged fie"
  246.   BtErr(70) = "**UNDEFINED ERROR"
  247.   BtErr(71) = "Violation of RI Rules"
  248.   BtErr(72) = "MicroKernel cannot open the RI Reference file"
  249.   BtErr(73) = "RI Definition is out of sync."
  250.   BtErr(74) = "MicroKernel Aborted Transaction"
  251.   BtErr(75) = "**UNDEFINED ERROR"
  252.   BtErr(76) = "Conflict in Reference File"
  253.   BtErr(77) = "Application encountered a wait error"
  254.   BtErr(78) = "MicroKernel detected a DeadLock condition"
  255.   BtErr(79) = "**UNDEFINED ERROR"
  256.   BtErr(80) = "MicroKernel encountered a record-level conflict"
  257.   BtErr(81) = "MicroKernel encountered a Lock Error"
  258.   BtErr(82) = "MicroKernel Lost positioning"
  259.   BtErr(83) = "MicroKernel attempted to read a record outside transaction"
  260.   BtErr(84) = "Record or Page is Locked"
  261.   BtErr(85) = "File is Locked"
  262.   BtErr(86) = "File Table is full"
  263.   BtErr(87) = "Handle Table is full"
  264.   BtErr(88) = "Incompatible mode error"
  265.   BtErr(89) = "**UNDEFINED ERROR"
  266.   BtErr(90) = "Redirected device table full"
  267.   BtErr(91) = "Server Error"
  268.   BtErr(92) = "Transaction table is full"
  269.   BtErr(93) = "Record lock types are incompatible"
  270.   BtErr(94) = "Permission Error"
  271.   BtErr(95) = "Session is no longer valid"
  272.   BtErr(96) = "Communications error"
  273.   BtErr(97) = "Data buffer too small"
  274.   BtErr(98) = "MicroKernel detected internal transaction error"
  275.   BtErr(99) = "Btrieve request unable to access Runtime server"
  276.   BtErr(100) = "No Cache buffers available"
  277.   BtErr(101) = "Insufficient operating system memory"
  278.   BtErr(102) = "Insufficient stack space"
  279.   BtErr(103) = "Chunk offset too big"
  280.   BtErr(104) = "MicroKernel does not recognize the locale"
  281.   BtErr(105) = "File cannot be crated with variable-tail Allocation records (VATs)"
  282.   BtErr(106) = "Chunk cannot perform a Get Next Operation"
  283.   BtErr(107) = "Attempted Chunk operation on a Pre v6.0 file"
  284.   BtErr(108) = "**UNDEFINED ERROR"
  285.   BtErr(109) = "Trasaction too complex"
  286.   BtErr(110) = "**UNDEFINED ERROR"
  287.   BtErr(111) = "**UNDEFINED ERROR"
  288.   BtErr(112) = "**UNDEFINED ERROR"
  289.   BtErr(113) = "**UNDEFINED ERROR"
  290.   BtErr(114) = "**UNDEFINED ERROR"
  291.   BtErr(115) = "**UNDEFINED ERROR"
  292.   BtErr(116) = "**UNDEFINED ERROR"
  293.   BtErr(117) = "**UNDEFINED ERROR"
  294.   BtErr(118) = "**UNDEFINED ERROR"
  295.   BtErr(119) = "**UNDEFINED ERROR"
  296.   BtErr(120) = "**UNDEFINED ERROR"
  297.   BtErr(121) = "**UNDEFINED ERROR"
  298.   BtErr(122) = "**UNDEFINED ERROR"
  299.   BtErr(123) = "**UNDEFINED ERROR"
  300.   BtErr(124) = "**UNDEFINED ERROR"
  301.   BtErr(125) = "**UNDEFINED ERROR"
  302.   BtErr(126) = "**UNDEFINED ERROR"
  303.   BtErr(127) = "**UNDEFINED ERROR"
  304.   BtErr(128) = "**UNDEFINED ERROR"
  305.   BtErr(129) = "**UNDEFINED ERROR"
  306.   BtErr(130) = "MicroKernel exhausted system locks"
  307.   BtErr(131) = "**UNDEFINED ERROR"
  308.   BtErr(132) = "**UNDEFINED ERROR"
  309.   BtErr(133) = "More than 5 Users on file"
  310.   
  311.  
  312.   'Option Description                Required value
  313.   '------ -----------                --------------
  314.   '/m     Memory size                At least 38
  315.   '/p     Page size                  4096
  316.   '/b     Pre-image buffer size      16
  317.   '/f     Open files                 At least 4
  318.   '/l     Multiple locks             At least double the setting for
  319.   '                                    the Open Files option (/f)
  320.   '/n     Files in a transaction     At least 4
  321.   '/t     Transaction file name      Valid path to a .TRN file;
  322.   '                                    in a multiuser environment,
  323.   '                                    network path to the .TRN
  324.   '                                    file shared by all users
  325.   '/u     Compression buffer size    If your Btrieve data files are
  326.   '                                    compressed, at least the length
  327.   '                                    (in kilobytes) of the longest
  328.   '                                    record in your data files
  329.   '/i     Pre-image file drive
  330.   '/c     Index compaction
  331.   '/a     Activate logging
  332.   '/s     Discard unneeded segments
  333.   
  334.   init = "/m:64 /p:4096 /b:16 /f:20 /l:40 /n:12 /t:C:\ACCESS\BTRIEVE.TRN"
  335.   x = wbtrvinit(init)
  336.   
  337.  
  338.  
  339.   stat = btrcall(B_VERSION, PosBlk, VerBuff, Buflen, KeyBuf, KeyBufLen, 0)
  340.  
  341.   
  342.   If stat = 0 Then
  343.     Version = Trim(Str(VerBuff.MainVer)) & "." & Trim(Str(VerBuff.SUbVer)) & " " & VerBuff.Type
  344.   Else
  345.     Version = ""
  346.   End If
  347.   
  348.   BtrInit = stat
  349.  
  350. End Function
  351.  
  352. Sub BtrStart ()
  353.   Dim KeyBuff As KeyBufDef
  354.   Dim KeyBuffLen As Integer
  355.   Dim DataBUff As DummyBuffDef
  356.   Dim DataBuffLen As Integer
  357.   Dim DummyPos As PosBlkDef
  358.   Dim stat As Integer
  359.   Dim Version As String
  360.   
  361.   stat = BtrInit(Version)
  362.   If stat = 0 Then
  363.     MsgBox "Version " & Version, , "BTRIEVE LOADED"
  364.     ' debug.Print "Btrieve Version " & Version
  365.     stat = btrcall(B_RESET, DummyPos, DataBUff, DataBuffLen, KeyBuff, KeyBuffLen, 0)
  366.     
  367.   Else
  368.     BtrComErr (stat)
  369.     End
  370.   End If
  371.   
  372. End Sub
  373.  
  374. Sub BtrStop ()
  375.   Dim KeyBuff As KeyBufDef
  376.   Dim KeyBuffLen As Integer
  377.   Dim DataBUff As DummyBuffDef
  378.   Dim DataBuffLen As Integer
  379.   Dim DummyPos As PosBlkDef
  380.   Dim stat As Integer
  381.   
  382.  
  383.   stat = btrcall(B_RESET, DummyPos, DataBUff, DataBuffLen, KeyBuff, KeyBuffLen, 0)
  384.   stat = btrcall(B_STOP, DummyPos, DataBUff, DataBuffLen, KeyBuff, KeyBuffLen, 0)
  385.   stat = wbtrvstop()
  386.  
  387. End Sub
  388.  
  389.